public class Derived extends Base {
    int a;//与父类中成员a同名，并且类型相同

    char b;//与父类成员b同名，但是类型不一样


    public Derived(){
        super();//这一句不写也可以，子类构造方法会默认调用基类的无参构造方法
        //但是你要是有参数，就不可以了噢
        //用户没有写的时候，编译器会自动的添加，而且super（）必须是子类构造方法中的第一条语句
        //只能出现一次
        //因为是构造方法——你也得满足构造方法的要求
        System.out.println("Derived()");
    }


    //与父类的A方法构成重载
    //
    public void methodA(int a){
        System.out.println("Derived中的methodA（）");
    }

    //与父类的B方法构成重写
    //也就是原型一致
    public void methodB(){
        System.out.println("Derived中的methodB（）");
    }
    public void methodD(){
        //此时this是当前对象的引用
        this.a=100;
        this.b=101;
        System.out.println(a);
        System.out.println(b);
        System.out.println("==============");

        super.a=200;
        super.b=201;
        System.out.println(super.a);
        System.out.println(super.b);
        System.out.println("==============");

        //父类和子类构成重载的方法，可以直接通过参数列表来区分访问父类还是子类方法
        methodA(10);
        methodA();

        //如果在子类中要访问重写的基类方法，则需要借助super关键字
        methodB();//直接访问，则永远访问的都是子类
        super.methodB();//访问基类的B方法

        //在子类方法中，如果要明确访问父类的成员，借助super关键字即可。
        //1.只能在非静态方法中使用
        //2.在子类方法中，访问父类的成员变量和方法。
        //
    }

    //子类构造方法
    //父子父子，先有父亲，后又儿子
    //也就是，子类对象构造时候，需要先调用基类构造方法，然后执行，子类的构造方法。


    public void methodC(){
        methodA();//访问从父类继承的
        methodB();//访问子类自己的

    }

//    public void method (){
//        a=100;
//        b=101;//
//        c=102;//子类没有c，访问的肯定是从父类继承下来的
//
//        //在子类方法或者通过子类对象访问成员时候：
//        //1.如果访问的成员变量子类中有，优先访问自己的成员变量
//        //如果访问的自己没有，去访问父类继承下来的，如果父类也没有，则编译报错
//        //如果访问同名变量，则优先访问自己的。
//        //变量访问遵循就近原则
//        //
//    }
}

//2.子类和父类成员变量同名

//由于设计不好，或者场景的需要，子类和父类中可能会存在相同名称的成员，如果要在子类方法中反问道父类同名成员
//应该怎样操作呢？
//直接访问是无法做到的，java提供了super关键字
//该关键字的主要作用：在子类方法发中去访问父类成员

